
// Boost Includes ==============================================================
#include <boost/python.hpp>
#include <boost/cstdint.hpp>

// Includes ====================================================================
#include <OpenSG/OSGRenderAction.h>
#include <OpenSG/OSGDrawTreeNode.h>
#include <OpenSG/OSGGeometry.h>
#include <OpenSG/OSGLight.h>
#include <OpenSG/OSGLightEnv.h>

// Using =======================================================================
using namespace boost::python;

// Declarations ================================================================
namespace  {

struct osg_RenderAction_Wrapper: osg::RenderAction
{
    osg::Action::ResultE start() {
        return call_method< osg::Action::ResultE >(py_self, "start");
    }

    osg::Action::ResultE default_start() {
        return osg::RenderAction::start();
    }

    osg::Action::ResultE stop(osg::Action::ResultE p0) {
        return call_method< osg::Action::ResultE >(py_self, "stop", p0);
    }

    osg::Action::ResultE default_stop(osg::Action::ResultE p0) {
        return osg::RenderAction::stop(p0);
    }

    bool isVisible(osg::Node* p0) {
        return call_method< bool >(py_self, "isVisible", p0);
    }

    bool default_isVisible(osg::Node* p0) {
        return osg::RenderAction::isVisible(p0);
    }

    std::vector<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits>,std::allocator<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits> > >* getDefaultEnterFunctors() {
        return call_method< std::vector<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits>,std::allocator<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits> > >* >(py_self, "getDefaultEnterFunctors");
    }

    std::vector<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits>,std::allocator<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits> > >* default_getDefaultEnterFunctors() {
        return osg::RenderAction::getDefaultEnterFunctors();
    }

    std::vector<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits>,std::allocator<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits> > >* getDefaultLeaveFunctors() {
        return call_method< std::vector<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits>,std::allocator<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits> > >* >(py_self, "getDefaultLeaveFunctors");
    }

    std::vector<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits>,std::allocator<osg::TypedFunctor2Base<osg::Action::ResultE, osg::CPtrRefCallArg<osg::CNodePtr>, osg::ArgsCollector<osg::Action*>, osg::DefaultFunctorSizeTraits> > >* default_getDefaultLeaveFunctors() {
        return osg::RenderAction::getDefaultLeaveFunctors();
    }

    void draw(osg::DrawTreeNode* p0) {
        call_method< void >(py_self, "draw", p0);
    }

    void default_draw(osg::DrawTreeNode* p0) {
        osg::RenderAction::draw(p0);
    }

/*
    osg::Action::ResultE apply(__gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > > p0, __gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > > p1) {
        return call_method< osg::Action::ResultE >(py_self, "apply", p0, p1);
    }

    osg::Action::ResultE default_apply(__gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > > p0, __gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > > p1) {
        return osg::Action::apply(p0, p1);
    }
*/
    osg::Action::ResultE apply(osg::NodePtr p0) {
        return call_method< osg::Action::ResultE >(py_self, "apply", p0);
    }

    osg::Action::ResultE default_apply(osg::NodePtr p0) {
        return osg::Action::apply(p0);
    }

    PyObject* py_self;
};


}// namespace 


// Module ======================================================================
void Export_src_pyste_RenderAction()
{
    scope* osg_RenderAction_scope = new scope(
    class_< osg::RenderAction, bases<> , boost::noncopyable, osg_RenderAction_Wrapper >("RenderAction", no_init)
        .def("start", (osg::Action::ResultE (osg::RenderAction::*)() )&osg::RenderAction::start, (osg::Action::ResultE (osg_RenderAction_Wrapper::*)())&osg_RenderAction_Wrapper::default_start)
        .def("stop", (osg::Action::ResultE (osg::RenderAction::*)(osg::Action::ResultE) )&osg::RenderAction::stop, (osg::Action::ResultE (osg_RenderAction_Wrapper::*)(osg::Action::ResultE))&osg_RenderAction_Wrapper::default_stop)
        .def("isVisible", (bool (osg::RenderAction::*)(osg::Node*) )&osg::RenderAction::isVisible, (bool (osg_RenderAction_Wrapper::*)(osg::Node*))&osg_RenderAction_Wrapper::default_isVisible)
        //.def("apply", (osg::Action::ResultE (osg::Action::*)(__gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > >, __gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > >) )&osg::Action::apply, (osg::Action::ResultE (osg_RenderAction_Wrapper::*)(__gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > >, __gnu_cxx::__normal_iterator<osg::NodePtr*,std::vector<osg::NodePtr, std::allocator<osg::NodePtr> > >))&osg_RenderAction_Wrapper::default_apply)
        //.def("apply", (osg::Action::ResultE (osg::Action::*)(osg::NodePtr) )&osg::Action::apply, (osg::Action::ResultE (osg_RenderAction_Wrapper::*)(osg::NodePtr))&osg_RenderAction_Wrapper::default_apply)
        .def("create", &osg::RenderAction::create, return_value_policy< manage_new_object >())
        .def("registerEnterDefault", &osg::RenderAction::registerEnterDefault)
        .def("registerLeaveDefault", &osg::RenderAction::registerLeaveDefault)
        .def("push_matrix", &osg::RenderAction::push_matrix)
        .def("pop_matrix", &osg::RenderAction::pop_matrix)
        .def("top_matrix", &osg::RenderAction::top_matrix, return_value_policy< copy_const_reference >())
        .def("dropGeometry", &osg::RenderAction::dropGeometry)
        .def("dropFunctor", &osg::RenderAction::dropFunctor)
        .def("dropLight", &osg::RenderAction::dropLight)
        .def("undropLight", &osg::RenderAction::undropLight)
        .def("dropLightEnv", &osg::RenderAction::dropLightEnv)
        .def("undropLightEnv", &osg::RenderAction::undropLightEnv)
        .def("setStateSorting", &osg::RenderAction::setStateSorting)
        .def("getStateSorting", &osg::RenderAction::getStateSorting)
        .def("getActiveLights", &osg::RenderAction::getActiveLights)
        .def("getActiveLightsMask", &osg::RenderAction::getActiveLightsMask)
        .def("setSortTrans", &osg::RenderAction::setSortTrans)
        .def("getSortTrans", &osg::RenderAction::getSortTrans)
        .def("setZWriteTrans", &osg::RenderAction::setZWriteTrans)
        .def("getZWriteTrans", &osg::RenderAction::getZWriteTrans)
        .def("setLocalLights", &osg::RenderAction::setLocalLights)
        .def("getLocalLights", &osg::RenderAction::getLocalLights)
        .def("setCorrectTwoSidedLighting", &osg::RenderAction::setCorrectTwoSidedLighting)
        .def("getCorrectTwoSidedLighting", &osg::RenderAction::getCorrectTwoSidedLighting)
        .def("setOcclusionCulling", &osg::RenderAction::setOcclusionCulling)
        .def("getOcclusionCulling", &osg::RenderAction::getOcclusionCulling)
        .def("setSmallFeatureCulling", &osg::RenderAction::setSmallFeatureCulling)
        .def("getSmallFeatureCulling", &osg::RenderAction::getSmallFeatureCulling)
        .def("setSmallFeaturePixels", &osg::RenderAction::setSmallFeaturePixels)
        .def("getSmallFeaturePixels", &osg::RenderAction::getSmallFeaturePixels)
        .def("setSmallFeatureThreshold", &osg::RenderAction::setSmallFeatureThreshold)
        .def("getSmallFeatureThreshold", &osg::RenderAction::getSmallFeatureThreshold)
        .def("setUseGLFinish", &osg::RenderAction::setUseGLFinish)
        .def("getUseGLFinish", &osg::RenderAction::getUseGLFinish)
        .def("isSmallFeature", &osg::RenderAction::isSmallFeature)
        .def("pushVisibility", &osg::RenderAction::pushVisibility)
        .def("popVisibility", &osg::RenderAction::popVisibility)
        .staticmethod("create")
        .staticmethod("registerEnterDefault")
        .staticmethod("registerLeaveDefault")
    );

    class_< osg::RenderAction::MatrixStore >("MatrixStore", init<  >())
        .def(init< const osg::RenderAction::MatrixStore& >())
        .def_readwrite("first", &osg::RenderAction::MatrixStore::first)
        .def_readwrite("second", &osg::RenderAction::MatrixStore::second)
        .def_readwrite("acc", &osg::RenderAction::MatrixStore::acc)
    ;

    delete osg_RenderAction_scope;

}

